package main

import (
	"fmt"
	"math/rand"
)

type kelvin float64
type sensor func() kelvin

func fakeSensor() kelvin {
	return kelvin(rand.Intn(151) + 150)
}

func calibrate(s sensor, offset kelvin) sensor {
	return func() kelvin {
		return s() + offset
	}
}

// 声明一个变量offset，并将其用作 calibrate 函数的 offset 实参，而不是使用字面值数字 5。在此之后，即使修改变量，调用 sensor() 的结果也仍然为 5。这是因为 offset 形参接受的是实参的副本而不是引用，也就是所谓的按值传递。
// 使用 calibrate 函数和今天讲的 fakeSensor 函数以创建新的 sensor 函数，然后多次调用这个新的 sensor 函数，看看它是否每次都会调用 fakeSensor 函数并产生随机的读数。

func main() {
	var offset kelvin = 5
	sensor := calibrate(fakeSensor, offset)

	for count := 0; count < 10; count++ {
		fmt.Println(sensor())
	}
}
